[小ネタ]Cloudformationのvalidate-template(文法チェック)におけるファイルサイズエラーの対処法
こんにちは、コカコーラ大好きカジです。
私は、構築作業をする際に、CloudFormationを利用しています。 必ず、テンプレートファイル作成後に以下のaws cliを利用したスクリプトで文法チェック(validate)をしています。 詳細は使い方は、こちらの【CloudFormation入門2】テンプレート作成を効率化するバリデーション機能と自動実行シェルの紹介を参照してください。 その際に、以下のファイルサイズエラーが発生し、対処法がわかったのでご紹介します。
エラー内容
aws cloudformation validate-template コマンドでチェックしたところ、以下のエラーメッセージが発生しました。
'templateBody' failed to satisfy constraint: Member must have length less than or equal to 51200
実際のファイルは以下です。
$ ls -ltr 02-SecurityGroup* -rw-r--r--@ 1 kajihiroyuki staff 42196 5 15 14:58 02-SecurityGroup-201905xx.yaml -rw-r--r--@ 1 kajihiroyuki staff 61163 5 25 18:42 02-SecurityGroup.yaml
規模が大きかったため、セキュリティグループだけのテンプレート(yamlファイル)で2000行超え程度です。 追加修正前のバックアップファイル時はエラーは発生せず、チェックできてました。 ファイルを分割すれば良いのでは?とお思いの方もいると思いますが、セキュリティグループIDで通信許可する関係で、ファイル分割したくなかったのです。
私の既存文法チェック方法
./check.sh <テンプレートファイル名>
スクリプトの中身はこんな感じです。
$ cat check.sh #!/bin/sh FILE=$1 cat $FILE | xargs -0 aws cloudformation validate-template --template-body
対処方法
一度S3にファイルをアップロードし、そのファイルをaws cliでチェックする様にすればチェックできます。 「 --template-url」オプションでチェックする様にします。アップロードはマネージメントコンソール経由でも、OKです。
対処した後の実行結果
スクリプト例
$ cat check-sg.sh #!/bin/sh FILE=$1 aws s3 cp ./$FILE s3:/// aws cloudformation validate-template --template-url https://s3-ap-northeast-1.amazonaws.com//$FILE
S3アップロードと、文法チェックを行えました。
$ ./check-sg.sh 02-SecurityGroup.yaml upload: ./02-it2-di-SecurityGroup.yaml to s3:///02-SecurityGroup.yaml { "Parameters": [ { "ParameterKey": "VpcId", "NoEcho": false, "Description": "VPC ID" } ], "Description": "Create Security Groups." }
まとめ
aws cloudformation validate-template コマンドで、「'templateBody' failed to satisfy constraint:Member must have length less than or equal to 51200」のエラーが出た際は、S3バケットにアップロードして文法チェックを行いましょう。 どなたかのお役に立てれば光栄です。
参考元
cluster.yml : member must have length less than or equal to 51200